2
תגובות
יש לי שלוש תבלאות שאני צריך לקשר בניהם:
הראשונה היא uploads, שהיא נראת ככה:
השניה uploads_reports
והשלישית users
uploads ו uploads_reports מקושרות כ has_many_and_belongs_to
ו uploads ו users מקושרות כ uploads belongs_to users על המפתח uploader_ID
בכל מקרה,
ככה השאילתה לשלוף את כל הקבצים המדוווחים נראת:
השאילתה שאני מנסה לכתוב היא כזאת:
שלוף את כל המשתמשים שיש להם קבצים מדווחים, סדר לפי מספר קבצים מדווחים.
נגיד למשתמש 1 יש 4 קבצים מדווחים, למשתמש 3 יש 5 קבצים מדווחים ולמשתמש 6 יש שלוש קבצים מדווחים זה יראה ככה:
או בקיצור אני צריך לשלוף את כל המשתמש שהקבצים שלהם מדווחים ולסדר אותם לפני מספר קבצים מדווחים.
אני יודע לעשות את זה בשתי שאילתות, אבל אני בטוח שאפשר לעשות את זה בשאילתא אחת ולשם אני שואף..
יש רעיונות?
הראשונה היא uploads, שהיא נראת ככה:
----------------------------
ID | uploader_ID | filename
----------------------------
ID | uploader_ID | filename
----------------------------
השניה uploads_reports
----------------------------
ID | report_ID | upload_id
----------------------------
ID | report_ID | upload_id
----------------------------
והשלישית users
----------------------------
ID | username
----------------------------
ID | username
----------------------------
uploads ו uploads_reports מקושרות כ has_many_and_belongs_to
ו uploads ו users מקושרות כ uploads belongs_to users על המפתח uploader_ID
בכל מקרה,
ככה השאילתה לשלוף את כל הקבצים המדוווחים נראת:
SELECT
`uploads`.*
FROM
`uploads_reports`
JOIN
`uploads`
ON
`uploads`.`id` = `uploads_reports`.`upload_id`
GROUP BY
`uploads`.`id`
`uploads`.*
FROM
`uploads_reports`
JOIN
`uploads`
ON
`uploads`.`id` = `uploads_reports`.`upload_id`
GROUP BY
`uploads`.`id`
השאילתה שאני מנסה לכתוב היא כזאת:
שלוף את כל המשתמשים שיש להם קבצים מדווחים, סדר לפי מספר קבצים מדווחים.
נגיד למשתמש 1 יש 4 קבצים מדווחים, למשתמש 3 יש 5 קבצים מדווחים ולמשתמש 6 יש שלוש קבצים מדווחים זה יראה ככה:
----------------------------
ID | username | uploads_reports_count
----------------------------
3 | test3 | 5
----------------------------
1 | test1 | 4
----------------------------
6 | test6 | 3
----------------------------
ID | username | uploads_reports_count
----------------------------
3 | test3 | 5
----------------------------
1 | test1 | 4
----------------------------
6 | test6 | 3
----------------------------
או בקיצור אני צריך לשלוף את כל המשתמש שהקבצים שלהם מדווחים ולסדר אותם לפני מספר קבצים מדווחים.
אני יודע לעשות את זה בשתי שאילתות, אבל אני בטוח שאפשר לעשות את זה בשאילתא אחת ולשם אני שואף..
יש רעיונות?
2 תשובות
SELECT users.id, users.username,
COUNT(uploads_reports.id) AS count1
FROM
users
LEFT JOIN uploads
ON users.id = uploads.uploader_ID
LEFT JOIN uploads_reports
ON uploads.id = uploads_reports.upload_id
GROUP BY uploads.uploader_id
ORDER BY count1 DESC
COUNT(uploads_reports.id) AS count1
FROM
users
LEFT JOIN uploads
ON users.id = uploads.uploader_ID
LEFT JOIN uploads_reports
ON uploads.id = uploads_reports.upload_id
GROUP BY uploads.uploader_id
ORDER BY count1 DESC
יהיה לך יותר פשוט להוסיף עמודה של report_count לכל יוזר ולעדכן אותה כל פעם שיש ריפורט חדש על קובץ של אותו יוזר.